<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 分割数组为连续子序列 -->
    <script>
      var isPossible = function (nums) {
        //map；
        let obj = Object.create(null)
        //存储数字的size
        for (let num of nums) {
          if (obj[num]) obj[num]++
          else obj[num] = 1
        }
        //只要对象不为空
        while (Object.keys(obj).length) {
          //计算子序列长度
          let flag = 0
          let size = 1
          //找到一个子序列
          for (let k in obj) {
            //子序列终点：如果当前数字的个数小于前一个数字的个数，例如 3，4，4，5。则会在4这个数字位置跳出
            if (obj[k] < size) break
            //更新数字个数最大值 ： 例如 3，4，4。 obj[3] = 1, obj[4] = 2。则size更新为2
            size = obj[k]
            obj[k]--
            flag++
            //一旦后续数字不是 当前数字+1，则不符合序列，也跳出。例如 2，5，6. 则在2处就跳出
            if (!obj[Number(k) + 1] || obj[Number(k) + 1] === 0) break
          }
          //当前序列长度 < 3 ，返回false
          if (flag < 3) return false
          //剔除个数为0 的 数字，方便遍历
          for (let k in obj) {
            if (obj[k] === 0) delete obj[k]
          }
        }
        return true
      }
      console.log(isPossible([1, 2, 3, 3, 4, 5]))
    </script>
  </body>
</html>
